Houdini数学 : 外積の数値を計算してみよう
外積の計算式
ベクトル$ \vec{A} = \begin{pmatrix} {x_1} \\\ {y_1} \\\ {z_1} \end{pmatrix}, \vec{B} = \begin{pmatrix} {x_2} \\\ {y_2} \\\ {z_2} \end{pmatrix}の外積$ \vec{A} \times \vec{B}は以下のように計算できます。
$ \vec{A} \times \vec{B} = \begin{pmatrix} {x_1} \\ {y_1} \\ {z_1} \end{pmatrix} \times \begin{pmatrix} {x_2} \\ {y_2} \\ {z_2} \end{pmatrix} = \begin{pmatrix} {y_1}{z_2} - {z_1}{y_2} \\ {z_1}{x_2} - {x_1}{z_2} \\ {x_1}{y_2} - {x_2}{y_1} \end{pmatrix}
ここで、$ \vec{A}, \vec{B} が共にxz平面に乗っている( $ y_1=y_2 = 0 )場合は以下のようになります。
$ \vec{A} \times \vec{B} = \begin{pmatrix} 0 \\ {z_1}{x_2} - {x_1}{z_2} \\ 0 \end{pmatrix}
Houdini
1. 点を追加
Addノードで点を追加します。点の座標は(0, 0, 0)です。
https://gyazo.com/2c69535f6594730c9226f3f5b46114b6
https://gyazo.com/391059c98153196f7f753086e20a9ef2
Geometryスプレッドシートを見ると、 ポイントの座標が(0, 0, 0)になっていることが分かります。
2. 外積を実装してみる
今回は $ \vec{A} = \begin{pmatrix} 1 \\\ 0 \\\ 3 \end{pmatrix}, \vec{B} = \begin{pmatrix} 2 \\\ 0 \\\ 4 \end{pmatrix} の外積$ \vec{A} \times \vec{B} を計算してみましょう。
今回の外積のY成分は $ 3 \cdot 2 - 4 \cdot 1 = 6 - 4 = 2 となります。 X,Z成分は0です。
AddノードにAttribuetWrangleノードを接続し、外積を計算するVEXコードを記述します。
code:AttributeWrangle(c)
vector A = {1, 0, 3}; // ベクトルA
vector B = {2, 0, 4}; // ベクトルB
@P = cross(A, B); // 外積を計算
https://gyazo.com/6cb6ed44021e52f9491e7f9c5c172c60
Geometry Speread Sheet を見ると、 ポイントのY座標は2になっています。
https://gyazo.com/6e5db335e752652328cb3186e4926980
数式の計算結果と、Houdini上の実行結果が一致しました。
3. 外積の計算順序を入れ替えてみる
外積は計算順序を入れ替えると、符号が反転するという法則があります。
$ \vec{B} \times \vec{A} = - \vec{A} \times \vec{B}
VEXを以下のように書き換えてみます。
code:AttributeWrangle(c)
vector A = {1, 0, 3};
vector B = {2, 0, 4};
@P = cross(B, A);
https://gyazo.com/4a8d6d60d8a145d173b48a2ee9add497
Geometry SpreadSheetを見ると、ポイントのY座標が2から-2へ変わりました。
https://gyazo.com/e368b570230f0c7f41c2df8c57daceb8
数式の計算結果と、Houdini上の実行結果が一致しました。